import axios from "axios";
import {ElMessage}  from "element-plus";
import router from '@/router';

// 创建实例
const instance = axios.create({
   baseURL: `${process.env.VUE_APP_API_PROTOCOL}://${process.env.VUE_APP_API_HOST}:${process.env.VUE_APP_API_PORT}/api`,
  // baseURL: "http://127.0.0.1:8000/api",
  timeout: 10000,
});

// 请求拦截器
instance.interceptors.request.use(config => {
      const token = window.localStorage.getItem('token');
      if(token) {
          config.headers = {
              'Authorization': 'token ' + token
          }
      }
      return config
  }, error => {
    // 本地处理配置时发生错误，而不是在请求发送到服务器之后
    ElMessage.error('Axios准备请求配置错误！');
    return Promise.reject(error)
});

// 响应拦截器
instance.interceptors.response.use(res => {
    // 在响应后做些什么，统一处理非201和200状态码
    console.log(res);
    if (res.data.code && res.data.code != 200 && res.data.code !== 201) {
      ElMessage.error(res.data.msg)
    }
    return res;
  }, error => {
    // 处理toke过期
    const code = error.response.data.code;
    const msg = error.response.data.msg;
    if (code === '501') {  // Token过期
        router.replace('/login') // 到登录界面
        window.localStorage.removeItem('token')  // 删除过期Token
        ElMessage.warning(msg);
        return Promise.reject(error)
    }else if (code === '502'){ // Token不存在
        console.log(msg)
        return Promise.reject(error)
    }
    // 处理404和403错误
    if (error.response && error.response.status === 404) {
      const { data } = error.response;
      if (data && data.detail === '无效页面。') {
        // 显示错误消息给用户
        ElMessage.warning('未找到请求的页面数据，请检查页码是否正确。');
      } else {
        // 处理其他404错误情况
        ElMessage.warning('请求的资源未找到', data);
      }
    }
    else if (error.response && error.response.status === 403){
        ElMessage.error("IP已禁止访问！");
    }
    // 处理其他类型的错误
    ElMessage.error("请求服务器接口错误！");
    return Promise.reject(error) // 仍然需要reject错误，以便在调用处能够捕获
});

export default instance;
